가상 메모리
연속 메모리 할당
- 연속 메모리 할당: 프로세스에 연속적인 메모리 공간을 할당하는 방시
- 스와핑: 메모리에서 사용 되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법
- 스왑영역: 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃: 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인: 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 최초 적합 방식: 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식
- 최적 적합 방식: 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합 방식: 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식
- 외부 단편화: 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상
- 해결방법
압축: 메모리 내에 저장된 프로세스를 재배치시켜 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법
→ 하나로 모으는 동안 시스템은 하던 일을 중지해야 하고 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기하며 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어렵다.
- 해결방법
페이징을 통한 가상 메모리 관리
-
연속 메모리 할당의 문제점
- 외부 단편화
- 물리 메모리보다 큰 프로세스를 실행할 수 없다.
→ 가상 메모리 - 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
크게 페이징과 세그멘테이션이 있지만 현대 대부분의 운영체제가 사용하는 방법은 페이징 기법이다. 이를 이용하면 물리 메모리보다 큰 프로세스를 실행할 수 있으며 외부 단편화 문제도 해결 가능하다.
- 외부 단편화
-
페이징: 물리 주소 공간을 프레임 단위로 자르고 프로세스의 논리 주소 공간을 페이지 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법
-
프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU는 이를 순차적으로 실행할 수 없다. 즉, ‘다음에 실행할 명령어 위치를 찾기가 어려워진다. 이를 해결하기 위해 페이징 시스템은 CPU가 바라보는 주소인 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한다.
-
페이지 테이블을 통해 페이지가 적재된 프레임을 찾을 수 있다.
- 프로세스마다 각자의 프로세스 테이블이 있으며 각 페이지 테이블 정보들은 프로세스의 PCB에 기록된다.
- 프로세스의 페이지 테이블들은 메모리에 적재되어 있다.
- 페이지 테이블에는 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 접근 비트, 수정 비트 등에 대한 정보가 있다.
- 유효 비트: 현재 해당 페이지에 접근 가능한지 여부를 알려주는 비트, 페이지가 메모리에 적재되어 있지 않으면 페이지 폴트 발생
- 보호 비트: 페이지에 접근할 권한을 제한하여 페이지를 보호하는 비트 (r - read, w - write, x - execute)
- 참조 비트: 페 이지에 접근한 적이 있는지 나타내는 비트
- 수정 비트: 해당 페이지가 수정된 적이 있는지 나타내는 비트
-
PTBR: 각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다.
-
페이지 테이블을 메모리에 두기 때문에 메모리 접근 시간이 두배로 늘어난다는 문제가 있다.
- 메모리에 있는 페이지 테이블을 보기 위해 한번, 그렇게 알게 된 프레임에 접근하기 위해 한번
- 이를 해결하기 위해 TLB 사용
-
TLB: 페이지 테이블의 캐시 메모리 역할을 수행하기 위해 페이지 테이블의 일부를 저장한다.
- 주로 최근에 사용된 페이지 위주로 가져와 저장한다.
- CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 TLB 히트라고 한다.
- 반대는 TLB 미스
-
하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있다. 따라서 특정 주소에 접근하려면 아래 두 정보가 필요하다.
- 어떤 페이지 혹은 프레임에 접근하고 싶은지 (페이지 번호)
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지 (변위)
즉, 논리 주소 (페이지 번호, 변위)는 페이지 테이블을 통해 물리 주소 (프레임 번호, 변호)로 변환된다.
-
페이지 테이블 엔트리: 페이지 테이블의 각 행들